{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "60907008-5e63-4e2f-86e4-eb956f000693",
   "metadata": {},
   "source": [
    "# Deep Research Model\n",
    "## Overview\n",
    "* Whereas TradingAgents focuses on making an active decision (buy, sell, hold) for a stock...\n",
    "* Deep Research is a more passive model, researching stocks with the goal of seeking alpha and maximizing long-term benefits\n",
    "## Model Breakdown\n",
    "* User asks a question regarding some stock to the director agent\n",
    "* Director agent dynamically allocates 4-6 Analyst agents who each focus on a distinct aspect of the prompt question. Director has discretion on what Analysts to generate and what priorities they have, but there is a human-in-loop.\n",
    "* Analysts conduct research in their subdomain with help of a Expert agents (Analyst <=> Expert loop)\n",
    "* Analysts also have access to tools like market data and stats (Yahoo Finance + pandas_ta)\n",
    "* Synthesize all findings from Analysts into a comprehensive report with graphs + tables\n",
    "## Next Steps\n",
    "* Implement a metric to estimate the helpfulness of a report. For example, if a report just regurgitates easily available info, doesn't really make a point, or is incorrect, low rating. If it introduces novel and accurate insights, high rating. This will help us with our goal of attaining higher alpha.\n",
    "* Implement Task Scoring and test a system that doesn't have dynamically generated Analysts, but instead 6-10 predefined ones and the Director picks the 4-6 best ones based on previous Task Scores of Agents"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "acce8a68-6098-4952-83de-2f54a07fd063",
   "metadata": {},
   "source": [
    "## Setup"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "36d507ad-5023-49a1-a1c0-783c29554d09",
   "metadata": {},
   "outputs": [],
   "source": [
    "from dotenv import load_dotenv\n",
    "import os, getpass\n",
    "\n",
    "load_dotenv()\n",
    "\n",
    "def _set_env(var: str):\n",
    "    if not os.environ.get(var):\n",
    "        os.environ[var] = getpass.getpass(f\"{var}: \")\n",
    "\n",
    "_set_env(\"OPENAI_API_KEY\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "6de724bf-c774-4e27-a53b-81484f09d6f7",
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain_openai import ChatOpenAI\n",
    "llm = ChatOpenAI(model=\"gpt-4o-mini\", temperature=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b42609fa-a3fe-4b9a-b44e-1026438aeaf7",
   "metadata": {},
   "source": [
    "## Director Agent: Generate Analysts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "3ffef57b-ee79-4b1d-9e13-4978c515937d",
   "metadata": {},
   "outputs": [],
   "source": [
    "from typing import List\n",
    "from typing_extensions import TypedDict\n",
    "from pydantic import BaseModel, Field\n",
    "\n",
    "STOCK_TICKER = None\n",
    "\n",
    "class Analyst(BaseModel):\n",
    "    affiliation: str = Field(\n",
    "        description=\"Primary affiliation of the analyst.\",\n",
    "    )\n",
    "    name: str = Field(\n",
    "        description=\"Name of the analyst.\"\n",
    "    )\n",
    "    role: str = Field(\n",
    "        description=\"Role of the analyst in the context of the topic.\",\n",
    "    )\n",
    "    description: str = Field(\n",
    "        description=\"Description of the analyst focus, concerns, and motives.\",\n",
    "    )\n",
    "    @property\n",
    "    def persona(self) -> str:\n",
    "        return f\"Name: {self.name}\\nRole: {self.role}\\nAffiliation: {self.affiliation}\\nDescription: {self.description}\\n\"\n",
    "\n",
    "class Perspectives(BaseModel):\n",
    "    analysts: List[Analyst] = Field(\n",
    "        description=\"Comprehensive list of analysts with their roles and affiliations.\",\n",
    "    )\n",
    "\n",
    "class GenerateAnalystsState(TypedDict):\n",
    "    topic: str # Research topic\n",
    "    min_analysts: int # min bound for analysts\n",
    "    max_analysts: int # max bound for analysts\n",
    "    human_analyst_feedback: str # Human feedback\n",
    "    analysts: List[Analyst] # Analyst asking questions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "b90f6c79-1ec1-45ab-8129-265283c72007",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from IPython.display import Image, display\n",
    "from langgraph.graph import START, END, StateGraph\n",
    "from langgraph.checkpoint.memory import MemorySaver\n",
    "from langchain_core.messages import AIMessage, HumanMessage, SystemMessage\n",
    "\n",
    "analyst_instructions=\"\"\"You are tasked with creating a set of AI analyst personas to analyze a stock. Follow these instructions carefully:\n",
    "\n",
    "1. First, do an unbiased review of the research inquiry for the stock {STOCK_TICKER}: {topic}\n",
    "\n",
    "2. Examine any editorial feedback that has been optionally provided to guide creation of the analysts: \n",
    "        \n",
    "{human_analyst_feedback}\n",
    "\n",
    "3. Determine the most interesting themes based on the inquiry and / or feedback above.\n",
    "                    \n",
    "4. Pick the top {min_analysts} to {max_analysts} themes. Minimize overlap between themes, ensuring they are distinct.\n",
    "\n",
    "5. Assign one analyst to each theme. Make sure they only focus on the stock mentioned in the inquiry.\"\"\"\n",
    "\n",
    "def create_analysts(state: GenerateAnalystsState):\n",
    "    \n",
    "    \"\"\" Create analysts \"\"\"\n",
    "    topic=state['topic']\n",
    "    min_analysts=state['min_analysts']\n",
    "    max_analysts=state['max_analysts']\n",
    "    human_analyst_feedback=state.get('human_analyst_feedback', '')\n",
    "        \n",
    "    # Enforce structured output\n",
    "    structured_llm = llm.with_structured_output(Perspectives)\n",
    "\n",
    "    # System message\n",
    "    system_message = analyst_instructions.format(STOCK_TICKER=STOCK_TICKER,\n",
    "                                                 topic=topic,\n",
    "                                                 human_analyst_feedback=human_analyst_feedback,\n",
    "                                                 min_analysts=min_analysts,\n",
    "                                                 max_analysts=max_analysts)\n",
    "\n",
    "    # Generate question \n",
    "    analysts = structured_llm.invoke([SystemMessage(content=system_message)]+[HumanMessage(content=\"Generate the set of analysts.\")])\n",
    "    \n",
    "    # Write the list of analysis to state\n",
    "    return {\"analysts\": analysts.analysts}\n",
    "\n",
    "def human_feedback(state: GenerateAnalystsState):\n",
    "    \"\"\" No-op node that should be interrupted on \"\"\"\n",
    "    pass\n",
    "\n",
    "def should_continue(state: GenerateAnalystsState):\n",
    "    \"\"\" Return the next node to execute \"\"\"\n",
    "\n",
    "    # Check if human feedback\n",
    "    human_analyst_feedback=state.get('human_analyst_feedback', None)\n",
    "    if human_analyst_feedback:\n",
    "        return \"create_analysts\"\n",
    "    \n",
    "    # Otherwise end\n",
    "    return END\n",
    "\n",
    "# Add nodes and edges \n",
    "builder = StateGraph(GenerateAnalystsState)\n",
    "builder.add_node(\"create_analysts\", create_analysts)\n",
    "builder.add_node(\"human_feedback\", human_feedback)\n",
    "builder.add_edge(START, \"create_analysts\")\n",
    "builder.add_edge(\"create_analysts\", \"human_feedback\")\n",
    "builder.add_conditional_edges(\"human_feedback\", should_continue, [\"create_analysts\", END])\n",
    "\n",
    "# Compile\n",
    "memory = MemorySaver()\n",
    "graph = builder.compile(interrupt_before=['human_feedback'], checkpointer=memory)\n",
    "\n",
    "# View\n",
    "display(Image(graph.get_graph(xray=1).draw_mermaid_png()))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6f3fc229-d65c-46a3-933f-7239579fad53",
   "metadata": {},
   "source": [
    "## Conduct Interviews (Analyst <=> Expert feedback loop)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "565dde5d-adf2-44f9-82a8-20c889c5c5bc",
   "metadata": {},
   "outputs": [],
   "source": [
    "import operator\n",
    "from typing import List, Annotated\n",
    "from langgraph.graph import MessagesState\n",
    "from typing_extensions import TypedDict\n",
    "\n",
    "def first_binary(a, b):\n",
    "    return a\n",
    "\n",
    "class InterviewState(MessagesState):\n",
    "    max_num_turns: int # Number turns of conversation\n",
    "    context: Annotated[List[str], operator.add] # Source docs\n",
    "    analyst: Analyst # Analyst asking questions\n",
    "    interview: str # Interview transcript\n",
    "    sections: list # Final key we duplicate in outer state for Send() API\n",
    "\n",
    "class SearchQuery(BaseModel):\n",
    "    search_query: str = Field(None, description=\"Search query for retrieval.\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "a1e178db-d3aa-491d-9246-0d966d10c8de",
   "metadata": {},
   "outputs": [],
   "source": [
    "#langchain's research model gives a clear set of question_instructions, which I've used here\n",
    "question_instructions = \"\"\"You are an analyst tasked with interviewing an expert to learn about a specific topic.\n",
    "\n",
    "Your ultimate goal is to **seek alpha**—identify unique, actionable insights that can provide a competitive edge in the market.\n",
    "\n",
    "You should focus on producing insights that are:\n",
    "\n",
    "1. Interesting: Surprising or non-obvious ideas that challenge conventional thinking or reveal overlooked patterns.\n",
    "\n",
    "2. Specific: Avoid vague generalities. Push for detailed examples, real-world use cases, and concrete mechanisms.\n",
    "\n",
    "3. Helpful: Above all, your insights should be useful for making smarter investment or trading decisions.\n",
    "Think about how each point could lead to alpha—either through better timing, allocation, or risk management.\n",
    "\n",
    "Here is your topic of focus and set of goals: {goals}\n",
    "\n",
    "Begin by introducing yourself using a name that fits your analyst persona, and then ask your first question.\n",
    "\n",
    "Continue to ask follow-up questions to drill deeper and refine your understanding, always with the intent of uncovering alpha-generating information.\n",
    "\n",
    "When you're confident you've extracted valuable insights, close the interview with: \"Thank you so much for your help!\"\n",
    "\n",
    "Remember to stay in character throughout your response, reflecting the persona and goals provided to you.\"\"\"\n",
    "\n",
    "def generate_question(state: InterviewState):\n",
    "    \"\"\" Node to generate a question \"\"\"\n",
    "\n",
    "    # Get state\n",
    "    \n",
    "    analyst = state[\"analyst\"]\n",
    "    messages = state[\"messages\"]\n",
    "\n",
    "    # Generate question \n",
    "    system_message = question_instructions.format(goals=analyst.persona)\n",
    "    question = llm.invoke([SystemMessage(content=system_message)]+messages)\n",
    "        \n",
    "    # Write messages to state\n",
    "    return {\"messages\": [question]}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "497e9bbc-68d8-45bd-bceb-e3006ae8d4d3",
   "metadata": {},
   "outputs": [],
   "source": [
    "def _set_env(var: str):\n",
    "    if not os.environ.get(var):\n",
    "        os.environ[var] = getpass.getpass(f\"{var}: \")\n",
    "\n",
    "_set_env(\"TAVILY_API_KEY\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "b9e3217a-1dfb-4869-980a-dc3a7dff5cc8",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Web search tool\n",
    "from langchain_community.tools.tavily_search import TavilySearchResults\n",
    "tavily_search = TavilySearchResults(max_results=3)\n",
    "\n",
    "# Wikipedia search tool\n",
    "from langchain_community.document_loaders import WikipediaLoader"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "512da1b0-33ec-49a4-8197-d54e048a693b",
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain_core.messages import get_buffer_string\n",
    "\n",
    "# Search query writing\n",
    "search_instructions = SystemMessage(content=f\"\"\"You will be given a conversation between an analyst and an expert. \n",
    "\n",
    "Your goal is to generate a well-structured query for use in retrieval and / or web-search related to the conversation.\n",
    "        \n",
    "First, analyze the full conversation.\n",
    "\n",
    "Pay particular attention to the final question posed by the analyst.\n",
    "\n",
    "Convert this final question into a well-structured web search query\"\"\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "7d6d6e73-1bad-41ec-81f1-5bba986fbfaa",
   "metadata": {},
   "outputs": [],
   "source": [
    "#SEARCH FUNCTIONS\n",
    "\n",
    "import yfinance as yf\n",
    "import ta\n",
    "\n",
    "def search_market_data(state: InterviewState):\n",
    "    \"\"\" Retrieve and summarize market data using Yahoo Finance + pandas_ta \"\"\"\n",
    "\n",
    "    global STOCK_TICKER\n",
    "    analyst = state[\"analyst\"]\n",
    "\n",
    "    try:\n",
    "        df = yf.Ticker(STOCK_TICKER).history(period=\"6mo\", interval=\"1d\")\n",
    "    except Exception as e:\n",
    "        return {\"context\": [f\"<Document source='yfinance_error'>Could not fetch data: {e}</Document>\"]}\n",
    "\n",
    "    df['rsi'] = ta.momentum.RSIIndicator(close=df['Close']).rsi()\n",
    "    df['ema'] = ta.trend.EMAIndicator(close=df['Close'], window=20).ema_indicator()\n",
    "\n",
    "    summary = df[['Close', 'rsi', 'ema']].dropna().tail(30).to_string(index=False)\n",
    "\n",
    "    formatted = f\"\"\"\n",
    "<Document source=\"yfinance/{STOCK_TICKER}\">\n",
    "Market Data Summary for {STOCK_TICKER} (Last 30 days):\n",
    "\n",
    "{summary}\n",
    "</Document>\n",
    "\"\"\"\n",
    "\n",
    "    return {\"context\": [formatted]}\n",
    "\n",
    "\n",
    "def search_web(state: InterviewState):\n",
    "    \n",
    "    \"\"\" Retrieve docs from web search \"\"\"\n",
    "\n",
    "    # Search query\n",
    "    structured_llm = llm.with_structured_output(SearchQuery)\n",
    "    search_query = structured_llm.invoke([search_instructions]+state['messages'])\n",
    "    \n",
    "    # Search\n",
    "    search_docs = tavily_search.invoke(search_query.search_query)\n",
    "\n",
    "     # Format\n",
    "    formatted_search_docs = \"\\n\\n---\\n\\n\".join(\n",
    "        [\n",
    "            f'<Document href=\"{doc[\"url\"]}\"/>\\n{doc[\"content\"]}\\n</Document>'\n",
    "            for doc in search_docs\n",
    "        ]\n",
    "    )\n",
    "\n",
    "    return {\"context\": [formatted_search_docs]} \n",
    "\n",
    "def search_wikipedia(state: InterviewState):\n",
    "    \n",
    "    \"\"\" Retrieve docs from wikipedia \"\"\"\n",
    "\n",
    "    # Search query\n",
    "    structured_llm = llm.with_structured_output(SearchQuery)\n",
    "    search_query = structured_llm.invoke([search_instructions]+state['messages'])\n",
    "    \n",
    "    # Search\n",
    "    search_docs = WikipediaLoader(query=search_query.search_query, \n",
    "                                  load_max_docs=2).load()\n",
    "\n",
    "     # Format\n",
    "    formatted_search_docs = \"\\n\\n---\\n\\n\".join(\n",
    "        [\n",
    "            f'<Document source=\"{doc.metadata[\"source\"]}\" page=\"{doc.metadata.get(\"page\", \"\")}\"/>\\n{doc.page_content}\\n</Document>'\n",
    "            for doc in search_docs\n",
    "        ]\n",
    "    )\n",
    "\n",
    "    return {\"context\": [formatted_search_docs]} \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "e3ffe2b8-50c4-4af8-b230-834ab7af0a19",
   "metadata": {},
   "outputs": [],
   "source": [
    "import io\n",
    "import base64\n",
    "import matplotlib.pyplot as plt\n",
    "import yfinance as yf\n",
    "\n",
    "def generate_stock_perf_chart_base64(benchmark_ticker: str = \"^GSPC\"):\n",
    "    global STOCK_TICKER\n",
    "    stock = yf.Ticker(STOCK_TICKER)\n",
    "    benchmark = yf.Ticker(benchmark_ticker)\n",
    "\n",
    "    df_stock = stock.history(period=\"2y\")\n",
    "    df_benchmark = benchmark.history(period=\"2y\")\n",
    "\n",
    "    df_stock['Return'] = df_stock['Close'].pct_change().fillna(0).add(1).cumprod().sub(1) * 100\n",
    "    df_benchmark['Return'] = df_benchmark['Close'].pct_change().fillna(0).add(1).cumprod().sub(1) * 100\n",
    "\n",
    "    def plot_perf():\n",
    "        plt.figure(figsize=(10, 5))\n",
    "        plt.plot(df_stock.index, df_stock['Return'], label=f'{STOCK_TICKER} Change %', color='blue')\n",
    "        plt.plot(df_benchmark.index, df_benchmark['Return'], label='S&P 500 Change %', color='red')\n",
    "        plt.title(f\"{STOCK_TICKER} vs S&P 500 - % Change Over Past 2 Years\")\n",
    "        plt.xlabel(\"Date\")\n",
    "        plt.ylabel(\"Change %\")\n",
    "        plt.legend()\n",
    "        plt.grid(True)\n",
    "\n",
    "    # Convert the plot to base64\n",
    "    buf = io.BytesIO()\n",
    "    plot_perf()\n",
    "    plt.tight_layout()\n",
    "    plt.savefig(buf, format='png')\n",
    "    plt.close()\n",
    "    buf.seek(0)\n",
    "    return base64.b64encode(buf.read()).decode('utf-8')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "86095987-b2c2-45d8-ac3c-121362efaf0c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "answer_instructions = \"\"\"You are an expert being interviewed by an analyst.\n",
    "\n",
    "Here is analyst area of focus: {goals}. \n",
    "        \n",
    "You goal is to answer a question posed by the interviewer.\n",
    "\n",
    "To answer question, use this context:\n",
    "        \n",
    "{context}\n",
    "\n",
    "When answering questions, follow these guidelines:\n",
    "        \n",
    "1. Use only the information provided in the context. \n",
    "        \n",
    "2. Do not introduce external information or make assumptions beyond what is explicitly stated in the context.\n",
    "\n",
    "3. The context contain sources at the topic of each individual document.\n",
    "\n",
    "4. Include these sources your answer next to any relevant statements. For example, for source # 1 use [1]. \n",
    "\n",
    "5. List your sources in order at the bottom of your answer. [1] Source 1, [2] Source 2, etc\n",
    "        \n",
    "6. If the source is: <Document source=\"assistant/docs/llama3_1.pdf\" page=\"7\"/>' then just list: \n",
    "        \n",
    "[1] assistant/docs/llama3_1.pdf, page 7 \n",
    "        \n",
    "And skip the addition of the brackets as well as the Document source preamble in your citation.\"\"\"\n",
    "\n",
    "def generate_answer(state: InterviewState):\n",
    "    \n",
    "    \"\"\" Node to answer a question \"\"\"\n",
    "\n",
    "    # Get state\n",
    "    \n",
    "    analyst = state[\"analyst\"]\n",
    "    messages = state[\"messages\"]\n",
    "    context = state[\"context\"]\n",
    "\n",
    "    # Answer question\n",
    "    system_message = answer_instructions.format(goals=analyst.persona, context=context)\n",
    "    answer = llm.invoke([SystemMessage(content=system_message)]+messages)\n",
    "            \n",
    "    # Name the message as coming from the expert\n",
    "    answer.name = \"expert\"\n",
    "    \n",
    "    # Append it to state\n",
    "    return {\"messages\": [answer]}\n",
    "\n",
    "def save_interview(state: InterviewState):\n",
    "    \n",
    "    \"\"\" Save interviews \"\"\"\n",
    "\n",
    "    # Get messages\n",
    "    messages = state[\"messages\"]\n",
    "    \n",
    "    # Convert interview to a string\n",
    "    interview = get_buffer_string(messages)\n",
    "    \n",
    "    # Save to interviews key\n",
    "    return {\"interview\": interview}\n",
    "\n",
    "def route_messages(state: InterviewState, \n",
    "                   name: str = \"expert\"):\n",
    "\n",
    "    \"\"\" Route between question and answer \"\"\"\n",
    "    \n",
    "    # Get messages\n",
    "    messages = state[\"messages\"]\n",
    "    max_num_turns = state.get('max_num_turns',2)\n",
    "\n",
    "    # Check the number of expert answers \n",
    "    num_responses = len(\n",
    "        [m for m in messages if isinstance(m, AIMessage) and m.name == name]\n",
    "    )\n",
    "\n",
    "    # End if expert has answered more than the max turns\n",
    "    if num_responses >= max_num_turns:\n",
    "        return 'save_interview'\n",
    "\n",
    "    # This router is run after each question - answer pair \n",
    "    # Get the last question asked to check if it signals the end of discussion\n",
    "    last_question = messages[-2]\n",
    "    \n",
    "    if \"Thank you so much for your help\" in last_question.content:\n",
    "        return 'save_interview'\n",
    "    return \"ask_question\"\n",
    "\n",
    "section_writer_instructions = \"\"\"You are an expert technical writer. \n",
    "            \n",
    "Your task is to create a short, easily digestible section of a report based on a set of source documents.\n",
    "\n",
    "1. Analyze the content of the source documents: \n",
    "- The name of each source document is at the start of the document, with the <Document tag.\n",
    "        \n",
    "2. Create a report structure using markdown formatting:\n",
    "- Use ## for the section title\n",
    "- Use ### for sub-section headers\n",
    "        \n",
    "3. Write the report following this structure:\n",
    "a. Title (## header)\n",
    "b. Summary (### header)\n",
    "c. Sources (### header)\n",
    "\n",
    "4. Make your title engaging based upon the focus area of the analyst: \n",
    "{focus}\n",
    "\n",
    "5. For the summary section:\n",
    "- Set up summary with general background / context related to the focus area of the analyst\n",
    "- Emphasize what is novel, interesting, or surprising about insights gathered from the interview\n",
    "- Create a numbered list of source documents, as you use them\n",
    "- Do not mention the names of interviewers or experts\n",
    "- Aim for approximately 400 words maximum\n",
    "- Use numbered sources in your report (e.g., [1], [2]) based on information from source documents\n",
    "        \n",
    "6. In the Sources section:\n",
    "- Include all sources used in your report\n",
    "- Provide full links to relevant websites or specific document paths\n",
    "- Separate each source by a newline. Use two spaces at the end of each line to create a newline in Markdown.\n",
    "- It will look like:\n",
    "\n",
    "### Sources\n",
    "[1] Link or Document name\n",
    "[2] Link or Document name\n",
    "\n",
    "7. Be sure to combine sources. For example this is not correct:\n",
    "\n",
    "[3] https://ai.meta.com/blog/meta-llama-3-1/\n",
    "[4] https://ai.meta.com/blog/meta-llama-3-1/\n",
    "\n",
    "There should be no redundant sources. It should simply be:\n",
    "\n",
    "[3] https://ai.meta.com/blog/meta-llama-3-1/\n",
    "        \n",
    "8. Final review:\n",
    "- Ensure the report follows the required structure\n",
    "- Include no preamble before the title of the report\n",
    "- Check that all guidelines have been followed\"\"\"\n",
    "\n",
    "def write_section(state: InterviewState):\n",
    "\n",
    "    \"\"\" Node to answer a question \"\"\"\n",
    "\n",
    "    # Get state\n",
    "    interview = state[\"interview\"]\n",
    "    context = state[\"context\"]\n",
    "    \n",
    "    analyst = state[\"analyst\"]\n",
    "   \n",
    "    # Write section using either the gathered source docs from interview (context) or the interview itself (interview)\n",
    "    system_message = section_writer_instructions.format(focus=analyst.description)\n",
    "    section = llm.invoke([SystemMessage(content=system_message)]+[HumanMessage(content=f\"Use this source to write your section: {context}\")]) \n",
    "                \n",
    "    # Append it to state\n",
    "    return {\"sections\": [section.content]}\n",
    "\n",
    "# Add nodes and edges \n",
    "interview_builder = StateGraph(InterviewState)\n",
    "interview_builder.add_node(\"ask_question\", generate_question)\n",
    "interview_builder.add_node(\"search_market_data\", search_market_data)\n",
    "interview_builder.add_node(\"search_web\", search_web)\n",
    "interview_builder.add_node(\"search_wikipedia\", search_wikipedia)\n",
    "interview_builder.add_node(\"answer_question\", generate_answer)\n",
    "interview_builder.add_node(\"save_interview\", save_interview)\n",
    "interview_builder.add_node(\"write_section\", write_section)\n",
    "\n",
    "# Flow\n",
    "interview_builder.add_edge(START, \"ask_question\")\n",
    "interview_builder.add_edge(\"ask_question\", \"search_market_data\")\n",
    "interview_builder.add_edge(\"ask_question\", \"search_web\")\n",
    "interview_builder.add_edge(\"ask_question\", \"search_wikipedia\")\n",
    "interview_builder.add_edge(\"search_market_data\", \"answer_question\")\n",
    "interview_builder.add_edge(\"search_web\", \"answer_question\")\n",
    "interview_builder.add_edge(\"search_wikipedia\", \"answer_question\")\n",
    "interview_builder.add_conditional_edges(\"answer_question\", route_messages,['ask_question','save_interview'])\n",
    "interview_builder.add_edge(\"save_interview\", \"write_section\")\n",
    "interview_builder.add_edge(\"write_section\", END)\n",
    "\n",
    "# Interview \n",
    "memory = MemorySaver()\n",
    "interview_graph = interview_builder.compile(checkpointer=memory).with_config(run_name=\"Conduct Interviews\")\n",
    "\n",
    "# View\n",
    "display(Image(interview_graph.get_graph().draw_mermaid_png()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "3fd48baf-0d42-413a-a672-548058923c5d",
   "metadata": {},
   "outputs": [],
   "source": [
    "class ResearchGraphState(TypedDict):\n",
    "    topic: str # Research topic\n",
    "    min_analysts: int # min analyst range\n",
    "    max_analysts: int # max analyst range\n",
    "    human_analyst_feedback: str # Human feedback\n",
    "    analysts: List[Analyst] # Analyst asking questions\n",
    "    sections: Annotated[list, operator.add] # Send() API key\n",
    "    introduction: str # Introduction for the final report\n",
    "    content: str # Content for the final report\n",
    "    conclusion: str # Conclusion for the final report\n",
    "    final_report: str # Final report"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "16d1589c-1603-4fd3-84f2-5d106236905f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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HA6HdJD7ZaGVKzo6WigUHjt2jHQQADAvVC6Afk2r1e7Zs2fFihWkg5iAhVYuiqLi4uKSk5NTUlJIBwEAc3F3d0flAujX1q9fv3HjxoExQ8ByKxdFUWvWrPnss89Onz5NOggAmEVFRUVrayvpFABwj1577bU5c+aEhISQDmIaFl25KIratWvXqVOntm3bRjoIAJiem5ubXq8nnQIAeqy2tnbq1KkrVqzw9/cnncVkLL1yURS1ceNGOzu7adOm3bhxg3QWADClqqoqjUZDOgUA9Mzhw4dfffXVr7/+2sPDg3QWU+q717DsTU888cSYMWPeffddPz+/Z5991tHRkXQiADABFoul0+lIpwCA7pLL5fv27WOz2d988w3pLKaHyvUXZ2fnHTt2nDx58rnnnouOjo6NjcVFgQD6O5lMhunzAP2CVqv97LPPrly5smbNmoiICNJxzAIHFv9m0qRJx48f9/DwWLx4cVxcXH5+PulEAHDvysvLW1paSKcAgM6o1eovv/xy6tSpEonkhx9+GKh9C5WrY0899dTevXuHDRu2cuXK1atXX7p0iXQiALgXHA4HF1QF6LMqKip27doVHR0tEoni4+PnzJlDOpF5MTDq3rnLly8fOnQoIyNj5syZM2bMcHZ2Jp0IALpr48aNY8eOHTVqFOkgAPA3f/7558GDBzMzM1944YXHH3+cdJxegrlcXRg1atSoUaOqqqp++umnF198cfjw4eHh4ZMnT+ZyuaSjAUAX6uvrGxoaSKcAgL/U1tYePXo0PT29rq5uzpw5mzdvJp2oV2GUq2euXbt27Nix+Pj40aNHT548eeLEiaQTAcBdrVu3Ljg4eMaMGaSDAFi606dPHz169ObNm48++uj06dOlUinpRASgct2j8+fPnzhxora21traety4cePGjbOxsSEdCgD+Zvv27Y6OjqhcAKQkJCScOnUqIyPD09Pz0UcfffDBB0knIgmV674YDIbz589fuHDhwoUL3t7eDz300Lhx4yQSCelcAEBRFPXVV19ZWVm99NJLpIMAWJarV68eP3789OnTkZGREyZMmDRpEofDIR2KPFQuk0lMTLxw4UJ5eXlGRkZUVNSoUaOioqL4fD7pXACWa+/evbW1tUuWLCEdBGDgq62tvXTp0sWLFxMSEqZNmxYaGjpx4kQej0c6Vx+CymV6paWlV65cuXz58pUr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",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from langgraph.constants import Send\n",
    "\n",
    "def initiate_all_interviews(state: ResearchGraphState):\n",
    "    \"\"\" This is the \"map\" step where we run each interview sub-graph using Send API \"\"\"    \n",
    "\n",
    "    # Check if human feedback\n",
    "    human_analyst_feedback=state.get('human_analyst_feedback')\n",
    "    if human_analyst_feedback:\n",
    "        # Return to create_analysts\n",
    "        return \"create_analysts\"\n",
    "\n",
    "    # Otherwise kick off interviews in parallel via Send() API\n",
    "    else:\n",
    "        topic = state[\"topic\"]\n",
    "        return [Send(\"conduct_interview\", {\"analyst\": analyst,\n",
    "                                           \"messages\": [HumanMessage(\n",
    "                                               content=f\"So you said you were writing an article on the {STOCK_TICKER} stock about {topic}?\"\n",
    "                                           )\n",
    "                                                       ]}) for analyst in state[\"analysts\"]]\n",
    "\n",
    "report_writer_instructions = \"\"\"You are a technical writer creating a report on the {STOCK_TICKER} stock about this overall topic: \n",
    "\n",
    "{topic}\n",
    "    \n",
    "You have a team of analysts. Each analyst has done two things: \n",
    "\n",
    "1. They conducted an interview with an expert on a specific sub-topic.\n",
    "2. They write up their finding into a memo.\n",
    "\n",
    "Your task: \n",
    "\n",
    "1. You will be given a collection of memos from your analysts.\n",
    "2. Think carefully about the insights from each memo.\n",
    "3. Consolidate these into a crisp overall summary that ties together the central ideas from all of the memos. \n",
    "4. Summarize the central points in each memo into a cohesive single narrative.\n",
    "\n",
    "To format your report:\n",
    " \n",
    "1. Use markdown formatting. Ensure any Latex is encapsulated properly (no hanging dollar signs)\n",
    "2. Include no pre-amble for the report.\n",
    "3. Use no sub-heading. \n",
    "4. Start your report with a single title header: ## Insights\n",
    "5. Do not mention any analyst names in your report.\n",
    "6. Preserve any citations in the memos, which will be annotated in brackets, for example [1] or [2].\n",
    "7. Create a final, consolidated list of sources and add to a Sources section with the `## Sources` header.\n",
    "8. List your sources in order and do not repeat.\n",
    "\n",
    "[1] Source 1\n",
    "[2] Source 2\n",
    "\n",
    "Here are the memos from your analysts to build your report from: \n",
    "\n",
    "{context}\"\"\"\n",
    "\n",
    "def write_report(state: ResearchGraphState):\n",
    "    # Full set of sections\n",
    "    sections = state[\"sections\"]\n",
    "    topic = state[\"topic\"]\n",
    "\n",
    "    # Concat all sections together\n",
    "    formatted_str_sections = \"\\n\\n\".join([f\"{section}\" for section in sections])\n",
    "    \n",
    "    # Summarize the sections into a final report\n",
    "    system_message = report_writer_instructions.format(STOCK_TICKER=STOCK_TICKER, topic=topic, context=formatted_str_sections)    \n",
    "    report = llm.invoke([SystemMessage(content=system_message)]+[HumanMessage(content=f\"Write a report based upon these memos.\")]) \n",
    "    return {\"content\": report.content}\n",
    "\n",
    "intro_conclusion_instructions = \"\"\"You are a technical writer finishing a report on the {STOCK_TICKER} stock about {topic}.\n",
    "\n",
    "You will be given all of the sections of the report.\n",
    "\n",
    "You job is to write a crisp and compelling introduction or conclusion section.\n",
    "\n",
    "The user will instruct you whether to write the introduction or conclusion.\n",
    "\n",
    "Include no pre-amble for either section.\n",
    "\n",
    "Target around 100 words, crisply previewing (for introduction) or recapping (for conclusion) all of the sections of the report.\n",
    "\n",
    "Use markdown formatting. \n",
    "\n",
    "For your introduction, create a compelling title and use the # header for the title.\n",
    "\n",
    "For your introduction, use ## Introduction as the section header. \n",
    "\n",
    "For your conclusion, use ## Conclusion as the section header.\n",
    "\n",
    "Here are the sections to reflect on for writing: {formatted_str_sections}\"\"\"\n",
    "\n",
    "def write_introduction(state: ResearchGraphState):\n",
    "    # Full set of sections\n",
    "    sections = state[\"sections\"]\n",
    "    topic = state[\"topic\"]\n",
    "\n",
    "    # Concat all sections together\n",
    "    formatted_str_sections = \"\\n\\n\".join([f\"{section}\" for section in sections])\n",
    "    \n",
    "    # Summarize the sections into a final report\n",
    "    \n",
    "    instructions = intro_conclusion_instructions.format(STOCK_TICKER=STOCK_TICKER, topic=topic, formatted_str_sections=formatted_str_sections)    \n",
    "    intro = llm.invoke([instructions]+[HumanMessage(content=f\"Write the report introduction\")]) \n",
    "    return {\"introduction\": intro.content}\n",
    "\n",
    "def write_conclusion(state: ResearchGraphState):\n",
    "    # Full set of sections\n",
    "    sections = state[\"sections\"]\n",
    "    topic = state[\"topic\"]\n",
    "\n",
    "    # Concat all sections together\n",
    "    formatted_str_sections = \"\\n\\n\".join([f\"{section}\" for section in sections])\n",
    "    \n",
    "    # Summarize the sections into a final report\n",
    "    \n",
    "    instructions = intro_conclusion_instructions.format(STOCK_TICKER=STOCK_TICKER, topic=topic, formatted_str_sections=formatted_str_sections)    \n",
    "    conclusion = llm.invoke([instructions]+[HumanMessage(content=f\"Write the report conclusion\")]) \n",
    "    return {\"conclusion\": conclusion.content}\n",
    "\n",
    "def finalize_report(state: ResearchGraphState):\n",
    "    \"\"\" This is the \"reduce\" step where we gather all the sections, combine them, and reflect on them to write the intro/conclusion. \"\"\"\n",
    "    content = state[\"content\"]\n",
    "    if content.startswith(\"## Insights\"):\n",
    "        content = content.strip(\"## Insights\")\n",
    "    if \"## Sources\" in content:\n",
    "        try:\n",
    "            content, sources = content.split(\"\\n## Sources\\n\")\n",
    "        except:\n",
    "            sources = None\n",
    "    else:\n",
    "        sources = None\n",
    "\n",
    "    final_report = state[\"introduction\"] + \"\\n\\n---\\n\\n\" + content + \"\\n\\n---\\n\\n\" + state[\"conclusion\"]\n",
    "\n",
    "    if sources is not None:\n",
    "        final_report += \"\\n\\n## Sources\\n\" + sources\n",
    "\n",
    "    chart_perf = generate_stock_perf_chart_base64()\n",
    "\n",
    "\n",
    "    if chart_perf or chart_pe:\n",
    "        final_report += \"\\n\\n## Visuals\\n\"\n",
    "        if chart_perf:\n",
    "            final_report += f\"![Performance Chart](data:image/png;base64,{chart_perf})\\n\"\n",
    "\n",
    "    return {\"final_report\": final_report}\n",
    "\n",
    "\n",
    "# Add nodes and edges \n",
    "builder = StateGraph(ResearchGraphState)\n",
    "builder.add_node(\"create_analysts\", create_analysts)\n",
    "builder.add_node(\"human_feedback\", human_feedback)\n",
    "builder.add_node(\"conduct_interview\", interview_builder.compile())\n",
    "builder.add_node(\"write_report\",write_report)\n",
    "builder.add_node(\"write_introduction\",write_introduction)\n",
    "builder.add_node(\"write_conclusion\",write_conclusion)\n",
    "builder.add_node(\"finalize_report\",finalize_report)\n",
    "\n",
    "# Logic\n",
    "builder.add_edge(START, \"create_analysts\")\n",
    "builder.add_edge(\"create_analysts\", \"human_feedback\")\n",
    "builder.add_conditional_edges(\"human_feedback\", initiate_all_interviews, [\"create_analysts\", \"conduct_interview\"])\n",
    "builder.add_edge(\"conduct_interview\", \"write_report\")\n",
    "builder.add_edge(\"conduct_interview\", \"write_introduction\")\n",
    "builder.add_edge(\"conduct_interview\", \"write_conclusion\")\n",
    "builder.add_edge([\"write_conclusion\", \"write_report\", \"write_introduction\"], \"finalize_report\")\n",
    "builder.add_edge(\"finalize_report\", END)\n",
    "\n",
    "# Compile\n",
    "memory = MemorySaver()\n",
    "graph = builder.compile(interrupt_before=['human_feedback'], checkpointer=memory)\n",
    "display(Image(graph.get_graph(xray=1).draw_mermaid_png()))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "60a629de-4f53-4ee8-aa23-19b573022632",
   "metadata": {},
   "source": [
    "## Testing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "42386243-9de8-499b-917b-6e18d16cf0d6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "Stock Ticker: AAPL\n",
      "Research Inquiry: financial sector analysis\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Name: Jordan Lee\n",
      "Affiliation: Tech Equity Research Group\n",
      "Role: Financial Performance Analyst\n",
      "Description: Jordan focuses on analyzing AAPL's financial statements, revenue growth, and profitability metrics to assess the company's financial health and performance in the tech sector.\n",
      "--------------------------------------------------\n",
      "Name: Samantha Chen\n",
      "Affiliation: Market Trends Institute\n",
      "Role: Market Sentiment Analyst\n",
      "Description: Samantha examines market trends, investor sentiment, and stock price movements related to AAPL, providing insights into how external factors influence the stock's performance.\n",
      "--------------------------------------------------\n",
      "Name: Michael Thompson\n",
      "Affiliation: Consumer Insights Agency\n",
      "Role: Consumer Behavior Analyst\n",
      "Description: Michael investigates consumer preferences and purchasing behavior regarding AAPL products, analyzing how these factors impact sales and market share.\n",
      "--------------------------------------------------\n",
      "Name: Emily Rodriguez\n",
      "Affiliation: Regulatory Affairs Group\n",
      "Role: Compliance and Regulatory Analyst\n",
      "Description: Emily evaluates the regulatory environment affecting AAPL, including compliance with financial regulations and potential impacts of new legislation on the company's operations.\n",
      "--------------------------------------------------\n",
      "Name: David Kim\n",
      "Affiliation: Global Economic Research Center\n",
      "Role: Macroeconomic Analyst\n",
      "Description: David analyzes macroeconomic indicators and their potential effects on AAPL's business model, including interest rates, inflation, and global economic trends.\n",
      "--------------------------------------------------\n",
      "Name: Olivia Patel\n",
      "Affiliation: Investment Strategy Firm\n",
      "Role: Valuation Analyst\n",
      "Description: Olivia focuses on the valuation of AAPL stock, utilizing various financial models to determine its fair value and investment potential in the context of the financial sector.\n",
      "--------------------------------------------------\n"
     ]
    }
   ],
   "source": [
    "#Input Inquiry + Human guidelines for Analyst Generation\n",
    "\n",
    "min_analysts = 4\n",
    "max_analysts = 6\n",
    "STOCK_TICKER = input(\"Stock Ticker:\")\n",
    "topic = input(\"Research Inquiry:\")\n",
    "thread = {\"configurable\": {\"thread_id\": \"1\"}}\n",
    "\n",
    "# Run the graph until the first interruption\n",
    "for event in graph.stream({\"topic\":topic, \"min_analysts\":min_analysts, \"max_analysts\":max_analysts,}, thread, stream_mode=\"values\"):\n",
    "    analysts = event.get('analysts', '')\n",
    "    if analysts:\n",
    "        for analyst in analysts:\n",
    "            print(f\"Name: {analyst.name}\")\n",
    "            print(f\"Affiliation: {analyst.affiliation}\")\n",
    "            print(f\"Role: {analyst.role}\")\n",
    "            print(f\"Description: {analyst.description}\")\n",
    "            print(\"-\" * 50)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "e30209fd-fa42-455a-a6d7-d9ebe05f1a74",
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "Any changes you want to make to the analysts? \n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'configurable': {'thread_id': '1',\n",
       "  'checkpoint_ns': '',\n",
       "  'checkpoint_id': '1f01a46a-fbf9-6a23-8002-c665ce63ef74'}}"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#HUMAN INPUT\n",
    "human_feedback = input(\"Any changes you want to make to the analysts?\")\n",
    "graph.update_state(thread, {\"human_analyst_feedback\": \n",
    "                                human_feedback}, as_node=\"human_feedback\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "9a610685-76a3-4f98-afd7-a0ce3463b1e4",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Name: Jordan Lee\n",
      "Affiliation: Tech Equity Research Group\n",
      "Role: Financial Performance Analyst\n",
      "Description: Jordan focuses on analyzing AAPL's financial statements, revenue growth, and profitability metrics to assess the company's financial health and performance in the tech sector.\n",
      "--------------------------------------------------\n",
      "Name: Samantha Chen\n",
      "Affiliation: Market Trends Institute\n",
      "Role: Market Sentiment Analyst\n",
      "Description: Samantha examines market trends, investor sentiment, and stock price movements related to AAPL, providing insights into how external factors influence the stock's performance.\n",
      "--------------------------------------------------\n",
      "Name: Michael Thompson\n",
      "Affiliation: Consumer Insights Agency\n",
      "Role: Consumer Behavior Analyst\n",
      "Description: Michael investigates consumer preferences and purchasing behavior regarding AAPL products, analyzing how these factors impact sales and market share.\n",
      "--------------------------------------------------\n",
      "Name: Emily Rodriguez\n",
      "Affiliation: Regulatory Affairs Group\n",
      "Role: Compliance and Regulatory Analyst\n",
      "Description: Emily evaluates the regulatory environment affecting AAPL, including compliance with financial regulations and potential impacts of new legislation on the company's operations.\n",
      "--------------------------------------------------\n",
      "Name: David Kim\n",
      "Affiliation: Global Economic Research Center\n",
      "Role: Macroeconomic Analyst\n",
      "Description: David analyzes macroeconomic indicators and their potential effects on AAPL's business model, including interest rates, inflation, and global economic trends.\n",
      "--------------------------------------------------\n",
      "Name: Olivia Patel\n",
      "Affiliation: Investment Strategy Firm\n",
      "Role: Valuation Analyst\n",
      "Description: Olivia focuses on the valuation of AAPL stock, utilizing various financial models to determine its fair value and investment potential in the context of the financial sector.\n",
      "--------------------------------------------------\n"
     ]
    }
   ],
   "source": [
    "# Check\n",
    "new_analysts = []\n",
    "\n",
    "for event in graph.stream(None, thread, stream_mode=\"values\"):\n",
    "    if 'analysts' in event:\n",
    "        new_analysts = event['analysts']\n",
    "\n",
    "# Now print only the last seen\n",
    "for analyst in new_analysts:\n",
    "    print(f\"Name: {analyst.name}\")\n",
    "    print(f\"Affiliation: {analyst.affiliation}\")\n",
    "    print(f\"Role: {analyst.role}\")\n",
    "    print(f\"Description: {analyst.description}\")\n",
    "    print(\"-\" * 50)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "c59c9804-52b7-4969-9ad5-2653f400a11b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'configurable': {'thread_id': '1',\n",
       "  'checkpoint_ns': '',\n",
       "  'checkpoint_id': '1f01a46c-d9e8-613c-8006-d3624fb9f811'}}"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Confirm we are happy\n",
    "graph.update_state(thread, {\"human_analyst_feedback\": \n",
    "                            None}, as_node=\"human_feedback\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "04d06154-45ad-4955-9bc3-bd75c2305e5f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--Node--\n",
      "conduct_interview\n",
      "--Node--\n",
      "conduct_interview\n",
      "--Node--\n",
      "conduct_interview\n",
      "--Node--\n",
      "conduct_interview\n",
      "--Node--\n",
      "conduct_interview\n",
      "--Node--\n",
      "conduct_interview\n",
      "--Node--\n",
      "write_conclusion\n",
      "--Node--\n",
      "write_introduction\n",
      "--Node--\n",
      "write_report\n",
      "--Node--\n",
      "finalize_report\n"
     ]
    }
   ],
   "source": [
    "for event in graph.stream(None, thread, stream_mode=\"updates\"):\n",
    "    print(\"--Node--\")\n",
    "    node_name = next(iter(event.keys()))\n",
    "    print(node_name)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "3c8b3913-b56a-429e-8ad2-33e25a736a73",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "# Financial Sector Analysis of Apple Inc. (AAPL)\n",
       "\n",
       "## Introduction\n",
       "\n",
       "This report delves into the financial sector analysis of Apple Inc. (AAPL), highlighting its robust financial health, market trends, and consumer behavior. We begin by examining AAPL's financial performance, focusing on revenue growth and profitability, particularly in its expanding services segment. Next, we analyze market trends and investor sentiment, revealing how external factors influence stock performance. We also explore consumer preferences, emphasizing brand loyalty among younger demographics. Additionally, the regulatory landscape's impact on AAPL's operations is assessed, alongside macroeconomic indicators shaping its business model. Finally, we provide valuation insights, offering a comprehensive view of AAPL's investment potential.\n",
       "\n",
       "---\n",
       "\n",
       "\n",
       "\n",
       "Apple Inc. (AAPL) continues to be a significant player in the financial sector, demonstrating robust financial health and resilience amid various market challenges. Recent analyses reveal a multifaceted view of AAPL's performance, driven by internal strategies and external economic factors.\n",
       "\n",
       "AAPL's financial performance has been characterized by consistent revenue growth, particularly in its services segment, which has become a crucial driver of profitability. The services revenue grew by 9% year-over-year in FY2023, reaching $85 billion, and is projected to potentially hit $100 billion by FY2025. This shift towards higher-margin services, which now account for 22% of total sales, underscores a strategic pivot that enhances overall financial stability [1][2][3]. Despite a slight decline in product sales, particularly in the iPhone category, the company's ability to maintain a loyal customer base—85% of iPhone sales come from repeat customers—highlights strong brand loyalty and satisfaction [4].\n",
       "\n",
       "However, AAPL's stock performance has been influenced by external factors, including macroeconomic conditions, geopolitical events, and regulatory pressures. Recent fluctuations in AAPL's stock price, ranging from a high of $239.07 to a low of $172.42, reflect a volatile market environment shaped by rising interest rates, inflation, and consumer spending patterns [5][6]. Analysts note that during periods of economic expansion, AAPL tends to perform well, but economic downturns can lead to reduced discretionary spending, adversely affecting sales and stock valuation [7].\n",
       "\n",
       "The regulatory landscape also poses challenges for AAPL, with increasing scrutiny from regulatory bodies regarding antitrust issues and compliance with new legislation such as the European Union's Digital Markets Act. These regulations may necessitate adjustments to AAPL's business model, impacting its operational strategies and market positioning [8][9]. While regulatory pressures can be burdensome, they may also present opportunities for innovation and differentiation in the marketplace.\n",
       "\n",
       "Valuation insights reveal a complex picture for AAPL stock, with various financial models suggesting differing intrinsic values. A Discounted Cash Flow (DCF) model estimates an intrinsic share price of $178.48, while a Dividend Discount Model suggests a lower valuation of $125.60 [10][11]. The current trading price of approximately $223.89 indicates that AAPL may be overvalued based on certain intrinsic value calculations, yet the company's strong market position and growth potential warrant close monitoring [12].\n",
       "\n",
       "In summary, AAPL's financial health is bolstered by innovative strategies and a solid international presence, but it must navigate a complex interplay of market trends, consumer behavior, and regulatory challenges. Understanding these dynamics is crucial for investors looking to make informed decisions regarding AAPL's future performance.\n",
       "\n",
       "\n",
       "---\n",
       "\n",
       "## Conclusion\n",
       "\n",
       "In summary, Apple Inc. (AAPL) showcases a robust financial health characterized by diverse revenue streams and a strategic pivot towards its services segment, which is projected to drive future growth. Despite facing external pressures from macroeconomic factors, regulatory challenges, and shifting consumer preferences, AAPL has demonstrated resilience through strong brand loyalty and innovative product offerings. The interplay of market trends and investor sentiment further complicates the stock's performance, highlighting the need for vigilance among investors. As AAPL navigates these complexities, its ability to adapt and innovate will be crucial in maintaining its competitive edge and delivering value to shareholders in the evolving tech landscape.\n",
       "\n",
       "## Sources\n",
       "[1] https://yfinance.com/AAPL  \n",
       "[2] https://ecommercedb.com/insights/inside-apple-revenue-latest-sales-figures-and-key-insights/4992  \n",
       "[3] https://www.forrester.com/blogs/apple-sales-and-profits-analysis-for-fy-2023-top-10-insights/  \n",
       "[4] https://www.start.io/blog/apple-target-market-analysis-apple-demographics-marketing-strategy-competitors/  \n",
       "[5] https://www.mdpi.com/2227-7390/11/23/4830  \n",
       "[6] https://fxopen.com/blog/en/oa-apple-report-drives-bearish-sentiment-for-aapl-stock/  \n",
       "[7] https://capital.com/apple-stock-price-in-10-years  \n",
       "[8] https://www.sec.gov/Archives/edgar/data/320193/000032019323000106/aapl-20230930.htm  \n",
       "[9] https://nyujlpp.org/wp-content/uploads/2024/07/JLPP-26-3-Trivedi.pdf  \n",
       "[10] https://students.tippie.uiowa.edu/sites/students.tippie.uiowa.edu/files/2024-04/s24_AAPL.pdf  \n",
       "[11] https://blog.wisesheets.io/master-sensitivity-analysis-in-excel-for-stocks/  \n",
       "[12] https://www.tikr.com/blog/why-apple-stock-might-actually-be-a-good-stock-to-buy-today?ref=tikrblo\n",
       "\n",
       "## Visuals\n",
       "![Performance Chart]()\n"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from IPython.display import Markdown\n",
    "final_state = graph.get_state(thread)\n",
    "report = final_state.values.get('final_report')\n",
    "Markdown(report)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
